﻿#ifndef __SS_READ_FILE_H__
#define __SS_READ_FILE_H__
//#include "../ssBaseDefine.h"
#include <fstream>
#include <string>
#include "../container/ssBuffer.h"
#ifdef SS_USE_ANDROID
#include "../byteStream/ssReadBytes.h"
#include <android/asset_manager.h>
#include <android/asset_manager_jni.h>
#endif

namespace StarSeeker
{

class ssReadFile
{
public:
	ssReadFile();
	~ssReadFile();
	//传入外部缓冲区
	bool SetBuffer(char *buf, ulint len);
	//释放内存
	void Clear();
	//设置文件路径
	void SetPath(const char* path) {m_path = path;}
	//打开文件
	bool OpenFile(bool binary=false);
	//关闭文件
	void CloseFile();
	//计算文件长度
	ulint FileSize();
	//按顺序获取一行，传入缓冲区就将数据写到缓冲区，否则写到内部缓冲区
	bool GetLine(char *buf, ulint len);
	//读取文件中的所有数据
	bool ReadAll();
	//返回内部缓冲区
	ssBuffer& GetBuffer() {return m_buffer;}
private:
	bool CreateBuffer();

	ssBuffer				m_buffer;	//缓存
	std::string				m_path;		//文件路径
	std::ifstream			m_fstream;	//文件流
#ifdef SS_USE_ANDROID
	ssReadBytes				m_readBytes;//用于逐行读取文本
	AAsset*					m_asset;	//安卓文件对象
	static AAssetManager*	s_pAssetMgr;//安卓文件管理器
public:
	static void SetAndroidAssetManager(AAssetManager* asg);
#endif
};

}
#endif
